16
תגובות
אני רוצה לאכסן איזורים וערים בDB
כגון אזור המרכז: תל אביב, רמת גן וכו'.
מה הדרך הכי טובה לאחסן אותם? בטבלה נפרדת ? באותה טבלה?
ואיך אני ניגש בשאילתה למשל אם אני רוצה אזור המרכז שיתן לי את כל התוצאות מתוך התת ערים שלו או רק עיר אחת למשל ספיציפית, עם המבנה שאתה ממליץ?

16 תשובות

avatar ענה yonikal56 ב 26 למאי 2014 #

טבלה לאזורים, טבלה לערים שבטבלה לערים יש עמודה של האזור שבתוכו נמצאת העיר(ID של אזור).

avatar ענה moshe7799 ב 26 למאי 2014 #

כן חשבתי על זה אבל איזה דרך יש לי לדעת אם היוזר בחר אזור או עיר ספיציפית?

avatar ענה yonikal56 ב 26 למאי 2014 #

2 עמודות בטבלת משתמשים.

avatar ענה moshe7799 ב 26 למאי 2014 #

לא מבין אותך, לא מדובר פה על עיר שהיוזר גר בה. מדובר על טבלה למשל של מוצרים תחשוב כמו באתר יד שניה.
נגיד יש לי רשימת SELECT שהיוזר בוחר:
מרכז
תל אביב
רמת גן
צפון
עפולה

איך אני יכול לדעת אם המשתמש רוצה את כל המוצרים מהערים שבמרכז ואז להחזיר לו את המידע מכל הערים או אם הוא מבקש רק עיר אחת למשל תל אביב אז להחזיר לו מידע רק בנוגע לתל אביב

avatar ענה nirbe ב 26 למאי 2014 #

אתה יכול גם להשתמש בקובץ טקסט פשוט בשביל זה, אתה לא חייב רק מסד נתונים.
אתה יכול ליצור קובץ טקסט שיראה פחות או יותר ככה:

-מרכז-
נתניה
תל אביב
רמת גן
-צפון-
עפולה


וב PHP לקבל מערך דו מימדי: מערך של כל האזורים, ובכל אזור מערך של כל הישובים.

אפשר לבסס את זה גם על מסד נתונים אם תרצה, אותו העיקרון.

avatar ענה moshe7799 ב 27 למאי 2014 #

אני חייב מסד אחרת איך אני ישלוף להם נתונים לפי העיר שהם רוצים

avatar ענה OrelBeY ב 27 למאי 2014 #

אני לא מבין על מה כל הדיון הזה.

===== Areas/Districts/Whatever... =====
==     id     |     name   ==
       0      |   מרכז
       1      |   צפון
================================

=========== Cities/Places/Whatever... ============
==     id     |     name        |   areaId      ==
    0      |    Rishon LeZion     |    0
============================================

ואז פשוט משתמשים בשאילתת JOIN אם רוצים את כל הערים באזור מסוים.

avatar ענה moshe7799 ב 27 למאי 2014 #

זאת לא הבעיה שלי
הבעיה איך אתה יודע אם המשתמש בחר שהוא רוצה אזור שלם או רק עיר אחת ומה תהיה השאילתא בהתאם
נגיד הוא בחר בעיר אחת זה קל - SELECT FROM CITIES WHERE CITY ID = ID
אבל מה אם הוא בוחר באזור איך אני מביא לו את כל הערים ששיכות לאותו אזור? ואיך אני יודע בכלל שהוא רוצה אזור שלם?

avatar ענה intval ב 27 למאי 2014 #

אם הוא בוחר עיר אחת:

select * from products where city IN ($cityName)

אם הוא בוחר איזור
select * from products where cityId IN (select cityId cities where areaId = $areaName)

avatar ענה vu47678 ב 01 ליוני 2014 #

ואיך תראה הSELECT בHTML?

avatar ענה OrelBeY ב 02 ליוני 2014 #

עקרונית זה בסדר פשוט להשתמש ב-<optgroup> (שמקבץ אפשרויות ב-<select>), אבל המשתמש לא יוכל ללחוץ על אזור-על במטרה לבחור את כל תתי-האזורים. לצערי אין לזה פתרון סמנטי כרגע. אי אפשר לעשות את זה עם optgroup, כי אין אפשרות לבחור בו בתור אפשרות.

יש לזה פתרון לא סמנטי: לא להשתמש ב-optgroup ולהשתמש ב-JavaScript (לא תוכל לדעת סתם ככה איזה סוג אזור קיבלת בצד השרת, אז תצטרך להוסיף משהו). אתה בעצם מוותר על הסמנטיות כאן, אבל מספק חוויית משתמש נורמלית. עד שיהיה פתרון סמנטי, אני חושב שזה פתרון קביל ואפילו מועדף.

avatar ענה vu47678 ב 02 ליוני 2014 #

כן אחי אבל מה יהיה הVALUE של כל אחד לפי השאילתות של אלכס?

avatar ענה OrelBeY ב 02 ליוני 2014 #

ה-ID שלהם אולי? שאילתות תעשה לבד.
לא הולכים לתת לך כאן את הקוד הסופי על מגש של זהב. אתה מבין SQL בסיסי ולא מבין משהו מסוים? תגיד מה בדיוק אתה לא מבין.

avatar ענה vu47678 ב 02 ליוני 2014 #

טוב כנראה יש פה אי הבנה גדולה, אנשים פה לא הבינו אותי אולי אני יסביר שוב פעם מהתחלה:
ש לי רשימת SELECT עם אזורים וערים בכל אזור.
יש טבלה של מוצרים, ששם יש CITY_ID, ועוד שתי טבלאות -
CITIES - NAME, AREA_ID
AREAS - ID, NAME

איך אני ידע לפי הVALUE אם הוא בחר לי באזור או בעיר ספיציפית? הרי זה בטבלאות שונות? ויש ID 1 למשל גם בטבלה ערים וגם באזורים
נגיד ואני יכתוב את זה בצורה הזאת:

<option value=1">מרכז</option>
<"option value="1">תל אביב</option>
<"option value="2">רמת גן</option>

avatar ענה OrelBeY ב 02 ליוני 2014 #

פשוט תוסיף אמצי זיהוי ל-value:

<option value="area-1" class="category">מרכז</option>
  <option value="city-1" class="item">ראשון לציון</option>
  <option value="city-2" class="item">פתח תקווה</option>

<option value="area-2" class="category">דרום</option>
  <option value="city-3" class="item">אשקלון</option>
  <option value="city-4" class="item">באר שבע</option>

avatar ענה vu47678 ב 02 ליוני 2014 #

ואז לפני השאילתא לבדוק בIF אם זאת עיר או אזור ולעשות שאילתא מתאימה בהתאם לזה?
זאת הדרך הכי טובה לזה?